#ifndef _DATA_H_
#define _DATA_H_

#include "net.h"
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <time.h>
#include <sqlite3.h>

#define  DATABASE  "student.db"

#define SIZE_IP_STR 17
#define SIZE_PORT_STR 6
#define SIZE_DT_TYPE 1
#define SIZE_DT_MSGLENGTH 4
#define SIZE_DATA_ID 4
#define SIZE_DATA_NAME 32
#define SIZE_DATA_SEX 1
#define SIZE_DATA_SCORE 4
#define SIZE_SQL_LENGTH 128

#define CONFIG_FILE_CLIENT ".clientIpInfo"
#define CONFIG_FILE_SERVER ".serverIpInfo"

//自定义请求类型和响应类型
enum{
	TYPE_INSERT, TYPE_DELETE, TYPE_UPDATE, TYPE_QUERY, TYPE_QUIT, TYPE_OK, TYPE_FAIL
};

//客户端请求结构体
struct data_transfer{
	//客户端/服务端操作类型
	uint8_t type;
	//客户端上送的学生信息id
	int id;
	//客户端上送的学生信息姓名
	char name[32];
	//客户端上送的学生信息性别
	char sex;
	//客户端上送的学生信息成绩
	int score;
	//服务端响应数据的长度
	int msgLength;
	//服务端响应数据
	char msg[0];
};


//环境信息
struct config{
	char ip[SIZE_IP_STR];
	char port[SIZE_PORT_STR];
};
//初始化环境
void FT_InitConfig(struct config *conf, bool flag);

/*客户端函数*/
//新增数据
void do_insert(int fd, struct data_transfer * dt);
//查询数据
void do_query(int fd, struct data_transfer *dt);
//更新数据
void do_update(int fd, struct data_transfer * dt);
//删除数据
void do_delete(int fd, struct data_transfer * dt);



/*服务端函数*/
//处理新增数据的客户端请求
void do_insert_handler(int fd, struct data_transfer * dt, sqlite3 *db); 
//处理查询数据的客户端请求
void do_query_handler(int fd, struct data_transfer *dt, sqlite3 *db);
//处理更新数据的客户端请求
void do_update_handler(int fd, struct data_transfer * dt, sqlite3 *db); 
//处理删除数据的客户端请求
void do_delete_handler(int fd, struct data_transfer *dt, sqlite3 *db);
#endif
